<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::Synchronizer&lt; T1, T2 &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_synchronizer.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pri-types">Private 类型</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_synchronizer-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::Synchronizer&lt; T1, T2 &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><code>#include &lt;<a class="el" href="synchronizer_8h_source.html">synchronizer.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:aa744736e27798afa3a9f13544cfbee34"><td class="memItemLeft" align="right" valign="top"><a id="aa744736e27798afa3a9f13544cfbee34"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>addCallback</b> (const CallbackFunction &amp;callback)</td></tr>
<tr class="separator:aa744736e27798afa3a9f13544cfbee34"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51f44189b61affc3e05245c72f9c9e27"><td class="memItemLeft" align="right" valign="top"><a id="a51f44189b61affc3e05245c72f9c9e27"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>removeCallback</b> (int i)</td></tr>
<tr class="separator:a51f44189b61affc3e05245c72f9c9e27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6a238c6e45e3aac396f49029e3fa7a4"><td class="memItemLeft" align="right" valign="top"><a id="ad6a238c6e45e3aac396f49029e3fa7a4"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>add0</b> (const T1 &amp;t, unsigned long time)</td></tr>
<tr class="separator:ad6a238c6e45e3aac396f49029e3fa7a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9c269b542f3ff78ed73a014a4bdf07d"><td class="memItemLeft" align="right" valign="top"><a id="ac9c269b542f3ff78ed73a014a4bdf07d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>add1</b> (const T2 &amp;t, unsigned long time)</td></tr>
<tr class="separator:ac9c269b542f3ff78ed73a014a4bdf07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-types"></a>
Private 类型</h2></td></tr>
<tr class="memitem:abcd2e8a2e5665f672028fb08db1199a9"><td class="memItemLeft" align="right" valign="top"><a id="abcd2e8a2e5665f672028fb08db1199a9"></a>
typedef std::pair&lt; unsigned long, T1 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>T1Stamped</b></td></tr>
<tr class="separator:abcd2e8a2e5665f672028fb08db1199a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a760826d91b72b708d9b0c752c574ea78"><td class="memItemLeft" align="right" valign="top"><a id="a760826d91b72b708d9b0c752c574ea78"></a>
typedef std::pair&lt; unsigned long, T2 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>T2Stamped</b></td></tr>
<tr class="separator:a760826d91b72b708d9b0c752c574ea78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65c15ba8fcd9c74fec760f843908c476"><td class="memItemLeft" align="right" valign="top"><a id="a65c15ba8fcd9c74fec760f843908c476"></a>
typedef boost::function&lt; void(T1, T2, unsigned long, unsigned long) &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CallbackFunction</b></td></tr>
<tr class="separator:a65c15ba8fcd9c74fec760f843908c476"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:aeeb33a46645eef110208b07909d751ec"><td class="memItemLeft" align="right" valign="top"><a id="aeeb33a46645eef110208b07909d751ec"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>publishData</b> ()</td></tr>
<tr class="separator:aeeb33a46645eef110208b07909d751ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb1e15da8fb84acb3165dea2a6b5ad23"><td class="memItemLeft" align="right" valign="top"><a id="aeb1e15da8fb84acb3165dea2a6b5ad23"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>publish</b> ()</td></tr>
<tr class="separator:aeb1e15da8fb84acb3165dea2a6b5ad23"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a71d22f47cf4de9726c8657654df54c53"><td class="memItemLeft" align="right" valign="top"><a id="a71d22f47cf4de9726c8657654df54c53"></a>
boost::mutex&#160;</td><td class="memItemRight" valign="bottom"><b>mutex1_</b></td></tr>
<tr class="separator:a71d22f47cf4de9726c8657654df54c53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c12a92fd714d75d0d54a984b2cf269b"><td class="memItemLeft" align="right" valign="top"><a id="a6c12a92fd714d75d0d54a984b2cf269b"></a>
boost::mutex&#160;</td><td class="memItemRight" valign="bottom"><b>mutex2_</b></td></tr>
<tr class="separator:a6c12a92fd714d75d0d54a984b2cf269b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1027246d27366ce1d42591d78ef7243"><td class="memItemLeft" align="right" valign="top"><a id="ad1027246d27366ce1d42591d78ef7243"></a>
boost::mutex&#160;</td><td class="memItemRight" valign="bottom"><b>publish_mutex_</b></td></tr>
<tr class="separator:ad1027246d27366ce1d42591d78ef7243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5cfe8d7633e74e3ede90663d34ac7d0"><td class="memItemLeft" align="right" valign="top"><a id="af5cfe8d7633e74e3ede90663d34ac7d0"></a>
std::deque&lt; T1Stamped &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>queueT1</b></td></tr>
<tr class="separator:af5cfe8d7633e74e3ede90663d34ac7d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96acfd9aa6cca4bc0a2c8197dc08aaf5"><td class="memItemLeft" align="right" valign="top"><a id="a96acfd9aa6cca4bc0a2c8197dc08aaf5"></a>
std::deque&lt; T2Stamped &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>queueT2</b></td></tr>
<tr class="separator:a96acfd9aa6cca4bc0a2c8197dc08aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bc37cd67766e7ec21c0dcb7036f6bb8"><td class="memItemLeft" align="right" valign="top"><a id="a4bc37cd67766e7ec21c0dcb7036f6bb8"></a>
std::map&lt; int, CallbackFunction &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>cb_</b></td></tr>
<tr class="separator:a4bc37cd67766e7ec21c0dcb7036f6bb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2981b2984d5c28f965dde6f0cd0e89a"><td class="memItemLeft" align="right" valign="top"><a id="af2981b2984d5c28f965dde6f0cd0e89a"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>callback_counter</b></td></tr>
<tr class="separator:af2981b2984d5c28f965dde6f0cd0e89a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename T1, typename T2&gt;<br />
class pcl::Synchronizer&lt; T1, T2 &gt;</h3>

<p>/brief This template class synchronizes two data streams of different types. The data can be added using add0 and add1 methods which expects also a timestamp of type unsigned long. If two matching data objects are found, registered callback functions are invoked with the objects and the time stamps. The only assumption of the timestamp is, that they are in the same unit, linear and strictly monotonic increasing. If filtering is desired, e.g. thresholding of time differences, the user can do that in the callback method. This class is thread safe. /ingroup common </p>
</div><hr/>该类的文档由以下文件生成:<ul>
<li>common/include/pcl/common/<a class="el" href="synchronizer_8h_source.html">synchronizer.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_synchronizer.html">Synchronizer</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
